package Control; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import javax.swing.JOptionPane; import javax.swing.JTable; import javax.swing.JTextField; import Orders.OPDept; import Orders.Order; import Stock.Product; import Stock.ProductsTable; import Stock.Warehouse; import UserInterface.OutputFrame; public class CustomerActions { private OutputFrame outputFrame; private Warehouse warehouse; private OPDept opdept; private Order order; private String nameOfTheCustomer; public CustomerActions(String nameOfTheCustomer) { this.nameOfTheCustomer = nameOfTheCustomer; } public void seeProducts() { ProductsTable pt = new ProductsTable(); outputFrame = new OutputFrame(pt.getTable(), "Products"); } public void orderProduct() { warehouse = new Warehouse(); opdept = new OPDept(); opdept.updateOrders(); warehouse.updateStock(); boolean foundID = false; boolean validQuantity = true; JTextField idField = new JTextField(10); JTextField quantityField = new JTextField(10); Object[] message = { "Input the ID of the product", idField, "Input the number of items", quantityField }; int quantity = 0; int option = JOptionPane.showConfirmDialog(null, message, "Order Product", JOptionPane.OK_CANCEL_OPTION); if (option == JOptionPane.OK_OPTION) { try { quantity = Integer.parseInt(quantityField.getText()); } catch (NumberFormatException e) { validQuantity = false; JOptionPane.showMessageDialog(null, "Invalid numeric format for Quantity !", "ERROR quantity field", JOptionPane.ERROR_MESSAGE); } for (Product product : warehouse.getStock()) { if (idField.getText().equals(product.getID())) { foundID = true; if (product.getQuantity() < quantity) { validQuantity = false; JOptionPane.showMessageDialog(null, "Quantity ordered is too large", "Invalid Quantity", JOptionPane.ERROR_MESSAGE); } else { if (validQuantity) { order = new Order(product.getID(), quantity, nameOfTheCustomer); order.setStatus("Pending"); opdept.addOrder(order); opdept.updateOrders(); JOptionPane.showMessageDialog(null, "Order successfully placed !", "Thnaks for buying", JOptionPane.INFORMATION_MESSAGE); outputFrame.getOutputFrame().hide(); } } } } if (!foundID) { JOptionPane.showMessageDialog(null, "No product has this ID", "Invalid ID", JOptionPane.ERROR_MESSAGE); } } } public void filterProducts() { warehouse = new Warehouse(); warehouse.updateStock(); JTextField makeField = new JTextField(10); JTextField typeField = new JTextField(10); JTextField priceField = new JTextField(10); Object[] message = { "Make", makeField, "Type", typeField, "Price", priceField }; int option = JOptionPane.showConfirmDialog(null, message, "Filter Products", JOptionPane.OK_CANCEL_OPTION); if (option == JOptionPane.OK_OPTION) { String[] header = { "ID", "Type", "Make", "Model", "Price", "Quantity" }; String make = makeField.getText(); String type = typeField.getText(); double price = 0.0; boolean validPrice = true; boolean less = false; boolean greater = false; boolean validSign = true; if (!priceField.getText().isEmpty()) { less = false; greater = false; validSign = true; if (priceField.getText().substring(0, 1).equals("<")) { less = true; } else if (priceField.getText().substring(0, 1).equals(">")) { greater = true; } else validSign = false; try { price = Double.parseDouble(priceField.getText().substring(1)); } catch (NumberFormatException e) { validPrice = false; } if (price < 0.0) validPrice = false; if (!validPrice) JOptionPane.showMessageDialog(null, "Invalid price !", "ERROR at price", JOptionPane.ERROR_MESSAGE); } Object[][] data = new Object[warehouse.getStock().size()][6]; int i = 0; for (Product product : warehouse.getStock()) { if (!make.isEmpty()) { if (product.getMake().equals(make)) { data[i][0] = product.getID(); data[i][1] = product.getType(); data[i][2] = product.getMake(); data[i][3] = product.getModel(); data[i][4] = product.getPrice(); data[i][5] = product.getQuantity(); i++; } } else if (!type.isEmpty()) { if (product.getType().equals(type)) { data[i][0] = product.getID(); data[i][1] = product.getType(); data[i][2] = product.getMake(); data[i][3] = product.getModel(); data[i][4] = product.getPrice(); data[i][5] = product.getQuantity(); i++; } } else if (price != 0.0) { if (!validSign) { JOptionPane.showMessageDialog(null, "Invalid sign. Valid signs are (> or <)", "Invalid sign", JOptionPane.ERROR_MESSAGE); break; } else { if (less && validSign) if (product.getPrice() < price) { data[i][0] = product.getID(); data[i][1] = product.getType(); data[i][2] = product.getMake(); data[i][3] = product.getModel(); data[i][4] = product.getPrice(); data[i][5] = product.getQuantity(); i++; } if (greater && validSign) if (product.getPrice() > price) { data[i][0] = product.getID(); data[i][1] = product.getType(); data[i][2] = product.getMake(); data[i][3] = product.getModel(); data[i][4] = product.getPrice(); data[i][5] = product.getQuantity(); i++; } } } } JTable filteredTable = new JTable(data, header); filteredTable.setPreferredScrollableViewportSize(new Dimension(500, 200)); filteredTable.setFillsViewportHeight(true); filteredTable.setEnabled(false); filteredTable.setFont(new Font("SansSerif", Font.BOLD, 16)); filteredTable.setForeground(Color.decode("0x121212")); filteredTable.setBackground(Color.decode("0xc9c9c9")); filteredTable.setGridColor(Color.WHITE); filteredTable.setRowHeight(25); outputFrame.getOutputFrame().hide(); outputFrame = new OutputFrame(filteredTable, "Filtered Products"); } } public void seeHistory() { opdept = new OPDept(); opdept.updateOrders(); String[] header = { "Order ID", "Customer Name", "Product ID", "Quantity", "Time", "Order Status" }; Object[][] data = new Object[opdept.getOrders().size()][6]; int i = 0; for (Order order : opdept.getOrders()) { if (order.getCustomerName().equals(nameOfTheCustomer)) { data[i][0] = order.getID(); data[i][1] = order.getCustomerName(); data[i][2] = order.getProductID(); data[i][3] = order.getQuantity(); data[i][4] = order.getTime(); data[i][5] = order.getStatus(); i++; } } JTable table = new JTable(data, header); table.setPreferredScrollableViewportSize(new Dimension(500, 200)); table.setFillsViewportHeight(true); table.setEnabled(false); table.setFont(new Font("SansSerif", Font.BOLD, 16)); table.setForeground(Color.decode("0x121212")); table.setBackground(Color.decode("0xc9c9c9")); table.setGridColor(Color.WHITE); table.setRowHeight(25); outputFrame = new OutputFrame(table, "Orders History for customer " + nameOfTheCustomer); } }